/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

/**
 *
 * @author Asucena Sarazua
 * Carné 08213
 * Algoritmos y Estructura de Datos
 * Guatemala
 */
package parqueo;
public class stack <E>
{
    private Object[] elementos;
    private int disponible;
    private int actual;

    public stack (int cantidad)
    {
        elementos = new Object[cantidad];
        for(int i = 0; i < elementos.length; i++)
        {
        	elementos[i] = null;
        }
        disponible = 0;
        actual=0;
    }
    public void guardar (E carro)
    {
    	/*elementos[actual] = carro;
    	actual++;
    	disponibles--;*/
	    if(actual == 0)
	    {
	    	elementos[0] = carro;
	    	actual++;
	    	disponible++;
	    }
	    else
	    {
	    	if(empty())
	    	{
	    	 elementos[disponible] = carro;
	    	 disponible++;
	    	 actual++;
	    	}
	    }//end
    }

    public boolean empty()
    {
    	if(actual < elementos.length)
    	{
    		return true;
    	}
    	else
    	{
    		return false;
    	}
    }

    public int num()
    {
    	return elementos.length;
    }
    public E elemento (int posicion)
    {
     return (E)elementos[posicion];
    }

    public void Sacar(E carro)
    {
    	int i = 0;
    	boolean find = false;
    	if(actual >= 0){
	    	while((i < elementos.length)&&(!find))
	    	{
	    		if(elementos[i].equals(carro))
	    		{
	    			find = true;
	    			elementos[i] = null;
	    			actual--;
	    		}//end
	    		i++;
	    	}//end
	    	ordenar();
    	}//end
    }//end

    public void ordenar()
    {
    	int i = 0;
    	boolean fin = false;
    	while((i < elementos.length)&&(!fin))
    	{
    		if(!elementos.equals(null))
    		{
    			if(elementos[i+1].equals(null))
    			{
    				int j = i+1;
    				boolean colocado = false;
    				while((j < elementos.length)&&(!colocado))
    				{
    					if(!elementos.equals(null))
    					{
    						elementos[i+1] = elementos[j];
    						colocado = true;
    					}
    					j++;
    				}
    			}//end
    		}//end
    		else
    		{
    			if(!fin)
    			{
	    			disponible = i;
	    			fin = true;
    			}
    		}
    		i++;
    	}//end
    }//end
}

 /*public boolean agregarPila (Object o) {

/* pregunto si la pila está llena. */
//if

//(puntero == pila.length) {

            /* Si es que está lleno no se pueden agregar más registros, por lo
             * tanto retorno falso. */
  //          return false;

        /* Caso Contrario */
       // }

//else {

            /* Significa que la pila aún no está llena y puedo seguir
             * agregando registros. Y agrego en la posición puntero. */
  //          pila[puntero]=o;

            /* Incremento el puntero para que se desplace hacia la siguiente
             * posición. */
    //        puntero++;

/* Retorno verdadero, porque se agregó el objeto. */
//return

//true;
  //      }
//}